import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let slItems = [
    {
        "label": "RegisterTrigger",
        "insertText": dedent`
        SL:RegisterTrigger(\${1:LUA_TRIGGER_CHAT_CLICK_PLAYER_NAME}, function(userData)
            \${2: -- body}
        end)
        `,
        "documentation": dedent`# 游戏触发-注册触发 
        [在线文档]（http://engine-doc.996m2.com/web/#/22/1356）
        触发函数返回true则阻断官方自带逻辑，返回false继续执行官方逻辑
        触发函数会带参数

        `
    },
    {
        "label": "UnRegisterTrigger",
        "insertText": dedent`
        SL:UnRegisterTrigger(\${1:LUA_TRIGGER_CHAT_CLICK_PLAYER_NAME})
        `,
        "documentation": dedent`# 游戏触发-注销触发 
        [在线文档]（http://engine-doc.996m2.com/web/#/22/1356）
        触发函数返回true则阻断官方自带逻辑，返回false继续执行官方逻辑
        触发函数会带参数

        `
    },
    {
        "label": "LUA_TRIGGER_CHAT_CLICK_PLAYER_NAME",
        "insertText": dedent`
        SL:RegisterTrigger(LUA_TRIGGER_CHAT_CLICK_PLAYER_NAME, function(userData)
            \${2: -- body}
        end)
        `,
        "documentation": dedent`# 游戏触发-注册触发 
        [在线文档]（http://engine-doc.996m2.com/web/#/22/1356）
        聊天框点击玩家名

        table — {SendId = 角色ID, SendName = 角色名}

        `
    },
    {
        "label": "LUA_TRIGGER_NOTICE_SHOW_ATTRIBUTES",
        "insertText": dedent`
        SL:RegisterTrigger(LUA_TRIGGER_NOTICE_SHOW_ATTRIBUTES, function(userData)
            \${2: -- body}
        end)
        `,
        "documentation": dedent`# 游戏触发-注册触发 
        [在线文档]（http://engine-doc.996m2.com/web/#/22/1356）
        属性提示通知

        table — 属性展示列表

        `
    },
    {
        "label": "LUA_TRIGGER_NOTICE_SHOW_GET_ITEM",
        "insertText": dedent`
        SL:RegisterTrigger(LUA_TRIGGER_NOTICE_SHOW_GET_ITEM, function(userData)
            \${2: -- body}
        end)
        `,
        "documentation": dedent`# 游戏触发-注册触发 
        [在线文档]（http://engine-doc.996m2.com/web/#/22/1356）
        获得物品提示

        table — {name = 物品名称, count = 数量, str = 文本, ishero = boolen(true为英雄)}

        `
    },
    {
        "label": "LUA_TRIGGER_NOTICE_SHOW_COST_ITEM",
        "insertText": dedent`
        SL:RegisterTrigger(LUA_TRIGGER_NOTICE_SHOW_COST_ITEM, function(userData)
            \${2: -- body}
        end)
        `,
        "documentation": dedent`# 游戏触发-注册触发 
        [在线文档]（http://engine-doc.996m2.com/web/#/22/1356）
        消耗物品提示

        table — {name = 物品名称, count = 数量, str = 文本, ishero = boolen(true为英雄)}

        `
    },
    {
        "label": "LUA_TRIGGER_NOTICE_SHOW_EXP_CHANGE",
        "insertText": dedent`
        SL:RegisterTrigger(LUA_TRIGGER_NOTICE_SHOW_EXP_CHANGE, function(userData)
            \${2: -- body}
        end)
        `,
        "documentation": dedent`# 游戏触发-注册触发 
        [在线文档]（http://engine-doc.996m2.com/web/#/22/1356）
        经验提示通知

        table — 显示参数

        `
    },

]


export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    slItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
